'when' bandi yordamida kuchli shartli baholashlar uchun JavaScript'ning ilg‘or pattern matching'ini o‘rganing, kodning o‘qilishini va qo‘llab-quvvatlanishini yaxshilang.
JavaScript Pattern Matching: 'When' yordamida shartli andozalarni baholash
JavaScript, an'anaviy ravishda o'zining dinamik va moslashuvchan tabiati bilan tanilgan bo'lsa-da, tobora ko'proq tuzilgan va deklarativ dasturlash uslublarini targ'ib qiluvchi xususiyatlarni o'zlashtirmoqda. Kutubxonalar va takliflar orqali mashhurlikka erishayotgan shunday xususiyatlardan biri bu pattern matching (andoza bilan moslashtirish)dir. Pattern matching dasturchilarga ma'lumotlar tuzilmalarini dekonstruksiya qilish va ushbu tuzilmalar ichidagi struktura va qiymatlarga asoslangan holda kodni bajarish imkonini beradi. Ushbu blog posti, pattern matching ilovalarida keng tarqalgan xususiyat bo'lgan 'when' bandi yordamida shartli andozalarni baholashning kuchli konsepsiyasini chuqur o'rganadi.
Pattern Matching nima?
Asosan, pattern matching bu qiymatni andozaga mos kelishini tekshirish va agar qiymat andozaga mos kelsa, keyingi ishlov berish uchun qiymatning qismlarini ajratib olish texnikasidir. Buni murakkab ichma-ich joylashgan `if` yoki ko'p so'zli `switch` operatorlariga nisbatan ifodaliroq va ixchamroq alternativa deb o'ylang. Pattern matching Haskell, Scala va F# kabi funksional dasturlash tillarida keng tarqalgan va tobora JavaScript va Python kabi asosiy tillarga kirib kelmoqda.
JavaScript'da pattern matching odatda 'ts-pattern' (TypeScript uchun) kabi kutubxonalar yoki hozirda ECMAScript uchun ko'rib chiqilayotgan Pattern Matching taklifi kabi takliflar orqali amalga oshiriladi.
'When' kuchi: Shartli andozalarni baholash
'when' bandi oddiy pattern matching imkoniyatlarini kengaytirib, andozalaringizga shartli mantiq qo'shish imkonini beradi. Bu shuni anglatadiki, andoza faqat qiymatning tuzilishi mos kelsa *va* 'when' bandida ko'rsatilgan shart 'true' (rost) deb baholansa mos keladi. Bu sizning pattern matching mantiqingizga sezilarli darajada moslashuvchanlik va aniqlik qatlamini qo'shadi.
Global elektron tijorat platformasidan foydalanuvchi ma'lumotlarini qayta ishlayotgan vaziyatni tasavvur qiling. Siz foydalanuvchining joylashuvi va xarajat odatlariga qarab turli chegirmalarni qo'llashni xohlashingiz mumkin. 'when' bo'lmasa, pattern matching holatlaringiz ichida ichma-ich joylashgan `if` operatorlariga duch kelishingiz mumkin, bu esa kodni kamroq o'qiladigan va qo'llab-quvvatlashni qiyinlashtiradi. 'when' bu shartlarni to'g'ridan-to'g'ri andoza ichida ifodalash imkonini beradi.
Ko'rgazmali misollar
Keling, buni amaliy misollar bilan ko'rib chiqaylik. Biz 'when' funksionalligini ta'minlaydigan taxminiy kutubxonadan foydalanamiz. E'tibor bering, sintaksis siz foydalanayotgan muayyan kutubxona yoki taklifga qarab farq qilishi mumkin.
1-misol: 'When' bilan oddiy tiplarni tekshirish
Aytaylik, tizim tomonidan qabul qilingan har xil turdagi xabarlarni qayta ishlashni xohlaysiz:
function processMessage(message) {
match(message)
.with({ type: "text", content: P.string }, (msg) => {
console.log(`Matnli xabarni qayta ishlash: ${msg.content}`);
})
.with({ type: "image", url: P.string }, (msg) => {
console.log(`Rasm xabarini qayta ishlash: ${msg.url}`);
})
.otherwise(() => {
console.log("Noma'lum xabar turi");
});
}
processMessage({ type: "text", content: "Salom, dunyo!" }); // Natija: Matnli xabarni qayta ishlash: Salom, dunyo!
processMessage({ type: "image", url: "https://example.com/image.jpg" }); // Natija: Rasm xabarini qayta ishlash: https://example.com/image.jpg
processMessage({ type: "audio", file: "audio.mp3" }); // Natija: Noma'lum xabar turi
Ushbu oddiy misolda biz `type` xususiyati va `content` yoki `url` kabi boshqa xususiyatlarning mavjudligiga qarab moslashtiryapmiz. `P.string` - bu ma'lumot turini tekshirish uchun o'rin egallovchi.
2-misol: Mintaqa va xarajatlarga asoslangan shartli chegirmalarni hisoblash
Endi, foydalanuvchining joylashuvi va xarajatlariga qarab chegirmalarni qayta ishlash uchun 'when' bandini qo'shamiz:
function calculateDiscount(user) {
match(user)
.with(
{
country: "USA",
spending: P.number.gt(100) //P.number.gt(100) xarajat 100 dan katta ekanligini tekshiradi
},
() => {
console.log("AQShdan bo'lgan va 100 dollardan ortiq xarajat qilgan foydalanuvchilar uchun 10% chegirma qo'llanilmoqda");
return 0.1;
}
)
.with(
{
country: "Canada",
spending: P.number.gt(50)
},
() => {
console.log("Kanadadan bo'lgan va 50 dollardan ortiq xarajat qilgan foydalanuvchilar uchun 5% chegirma qo'llanilmoqda");
return 0.05;
}
)
.with({ country: P.string }, (u) => {
console.log(`${u.country}dan bo'lgan foydalanuvchilar uchun maxsus chegirma yo'q`);
return 0;
})
.otherwise(() => {
console.log("Chegirma qo'llanilmadi.");
return 0;
});
}
const user1 = { country: "USA", spending: 150 };
const user2 = { country: "Canada", spending: 75 };
const user3 = { country: "UK", spending: 200 };
console.log(`1-foydalanuvchi uchun chegirma: ${calculateDiscount(user1)}`); // Natija: AQShdan bo'lgan va 100 dollardan ortiq xarajat qilgan foydalanuvchilar uchun 10% chegirma qo'llanilmoqda; 1-foydalanuvchi uchun chegirma: 0.1
console.log(`2-foydalanuvchi uchun chegirma: ${calculateDiscount(user2)}`); // Natija: Kanadadan bo'lgan va 50 dollardan ortiq xarajat qilgan foydalanuvchilar uchun 5% chegirma qo'llanilmoqda; 2-foydalanuvchi uchun chegirma: 0.05
console.log(`3-foydalanuvchi uchun chegirma: ${calculateDiscount(user3)}`); // Natija: UKdan bo'lgan foydalanuvchilar uchun maxsus chegirma yo'q; 3-foydalanuvchi uchun chegirma: 0
Ushbu misolda, 'when' bandi (`with` funksiyasi ichida yashirin tarzda ifodalangan) bizga `spending` xususiyatiga shartlar qo'yish imkonini beradi. Chegirmani qo'llashdan oldin xarajat ma'lum bir chegaradan yuqori ekanligini tekshirishimiz mumkin. Bu har bir holat ichida ichma-ich joylashgan `if` operatorlariga bo'lgan ehtiyojni yo'q qiladi.
3-misol: Valyuta kurslari bilan turli valyutalarni qayta ishlash
Keling, tranzaksiya valyutasiga qarab turli valyuta kurslarini qo'llashimiz kerak bo'lgan murakkabroq stsenariyni ko'rib chiqaylik. Bu ham pattern matching, ham shartli baholashni talab qiladi:
function processTransaction(transaction) {
match(transaction)
.with(
{ currency: "USD", amount: P.number.gt(0) },
() => {
console.log(`USD tranzaksiyasini qayta ishlash: ${transaction.amount}`);
return transaction.amount;
}
)
.with(
{ currency: "EUR", amount: P.number.gt(0) },
() => {
const amountInUSD = transaction.amount * 1.1; // Taxminan 1 EUR = 1.1 USD
console.log(`EUR tranzaksiyasini qayta ishlash: ${transaction.amount} EUR (${amountInUSD} USD ga o'girildi)`);
return amountInUSD;
}
)
.with(
{ currency: "GBP", amount: P.number.gt(0) },
() => {
const amountInUSD = transaction.amount * 1.3; // Taxminan 1 GBP = 1.3 USD
console.log(`GBP tranzaksiyasini qayta ishlash: ${transaction.amount} GBP (${amountInUSD} USD ga o'girildi)`);
return amountInUSD;
}
)
.otherwise(() => {
console.log("Qo'llab-quvvatlanmaydigan valyuta yoki noto'g'ri tranzaksiya.");
return 0;
});
}
const transaction1 = { currency: "USD", amount: 100 };
const transaction2 = { currency: "EUR", amount: 50 };
const transaction3 = { currency: "JPY", amount: 10000 };
console.log(`1-tranzaksiya USD qiymati: ${processTransaction(transaction1)}`); // Natija: USD tranzaksiyasini qayta ishlash: 100; 1-tranzaksiya USD qiymati: 100
console.log(`2-tranzaksiya USD qiymati: ${processTransaction(transaction2)}`); // Natija: EUR tranzaksiyasini qayta ishlash: 50 EUR (55 USD ga o'girildi); 2-tranzaksiya USD qiymati: 55
console.log(`3-tranzaksiya USD qiymati: ${processTransaction(transaction3)}`); // Natija: Qo'llab-quvvatlanmaydigan valyuta yoki noto'g'ri tranzaksiya.; 3-tranzaksiya USD qiymati: 0
Garchi bu misol `when` funksionalligidan to'g'ridan-to'g'ri foydalanmasa ham, u umuman olganda pattern matching turli stsenariylarni (turli valyutalar) boshqarish va tegishli mantiqni (valyuta kurslarini konvertatsiya qilish) qo'llash uchun qanday ishlatilishini ko'rsatadi. 'when' bandi shartlarni yanada aniqlashtirish uchun qo'shilishi mumkin. Masalan, biz EUR ni USD ga faqat foydalanuvchining joylashuvi Shimoliy Amerikada bo'lsa konvertatsiya qilishimiz, aks holda EUR ni CAD ga o'girishimiz mumkin.
Pattern Matching'da 'When' dan foydalanishning afzalliklari
- O'qilishi yaxshilanganligi: Shartli mantiqni to'g'ridan-to'g'ri andoza ichida ifodalash orqali, siz ichma-ich joylashgan `if` operatorlaridan qochasiz, bu esa kodni tushunishni osonlashtiradi.
- Qo'llab-quvvatlashning osonlashishi: 'when' bilan pattern matching'ning deklarativ tabiati kodingizni o'zgartirish va kengaytirishni osonlashtiradi. Yangi holatlarni qo'shish yoki mavjud shartlarni o'zgartirish ancha soddalashadi.
- Ortiqcha kodning kamayishi: Pattern matching ko'pincha takrorlanuvchi tiplarni tekshirish va ma'lumotlarni ajratib olish kodiga bo'lgan ehtiyojni yo'q qiladi.
- Ifodalilikning ortishi: 'When' murakkab shartlarni qisqa va nafis tarzda ifodalash imkonini beradi.
E'tiborga olinadigan jihatlar va eng yaxshi amaliyotlar
- Kutubxona/Taklifni qo'llab-quvvatlash: Pattern matching xususiyatlarining mavjudligi va sintaksisi JavaScript muhitiga va siz foydalanayotgan kutubxonalar yoki takliflarga qarab farq qiladi. O'z ehtiyojlaringiz va kodlash uslubingizga eng mos keladigan kutubxona yoki taklifni tanlang.
- Ishlash samaradorligi: Pattern matching kodning o'qilishini yaxshilashi mumkin bo'lsa-da, uning ishlash samaradorligiga ta'sirini hisobga olish muhim. Murakkab andozalar va shartlar ishlash samaradorligiga potentsial ta'sir qilishi mumkin, shuning uchun kodingizni profillash va kerakli joylarda optimallashtirish muhim.
- Kodning aniqligi: 'when' bilan ham kodning aniqligini saqlash juda muhim. Andozalarni tushunishni qiyinlashtiradigan haddan tashqari murakkab shartlardan saqlaning. Andozalaringiz ortidagi mantiqni tushuntirish uchun ma'noli o'zgaruvchi nomlari va izohlardan foydalaning.
- Xatoliklarni qayta ishlash: Pattern matching mantiqingiz kutilmagan kirish qiymatlarini to'g'ri qayta ishlash uchun tegishli xatoliklarni qayta ishlash mexanizmlarini o'z ichiga olganligiga ishonch hosil qiling. Bu yerda `otherwise` bandi juda muhim.
Haqiqiy hayotdagi qo'llanilishi
'when' bilan pattern matching turli xil real hayotiy stsenariylarda qo'llanilishi mumkin, jumladan:
- Ma'lumotlarni tekshirish: API so'rovlari yoki foydalanuvchi kiritgan ma'lumotlar kabi kiruvchi ma'lumotlarning tuzilishi va qiymatlarini tasdiqlash.
- Marshrutlash: URL yoki boshqa so'rov parametrlariga asoslangan marshrutlash mantiqini amalga oshirish.
- Holatni boshqarish: Ilova holatini bashorat qilinadigan va qo'llab-quvvatlanadigan tarzda boshqarish.
- Kompilyator qurilishi: Parserlar va boshqa kompilyator komponentlarini amalga oshirish.
- Sun'iy intellekt va mashinani o'rganish: Xususiyatlarni ajratib olish va ma'lumotlarga dastlabki ishlov berish.
- O'yin ishlab chiqish: Turli o'yin hodisalari va o'yinchi harakatlarini boshqarish.
Masalan, xalqaro bank ilovasini ko'rib chiqing. 'when' bilan pattern matching yordamida siz kelib chiqqan mamlakat, valyuta, miqdor va tranzaksiya turiga (masalan, depozit, yechib olish, o'tkazma) qarab tranzaksiyalarni turlicha qayta ishlashingiz mumkin. Muayyan mamlakatlardan kelib chiqqan yoki ma'lum miqdordan oshib ketgan tranzaksiyalar uchun turli me'yoriy talablar bo'lishi mumkin.
Xulosa
JavaScript pattern matching, ayniqsa shartli andozalarni baholash uchun 'when' bandi bilan birgalikda, yanada ifodali, o'qilishi oson va qo'llab-quvvatlanadigan kod yozishning kuchli va nafis usulini taklif etadi. Pattern matching'dan foydalanib, siz murakkab shartli mantiqni sezilarli darajada soddalashtirishingiz va JavaScript ilovalaringizning umumiy sifatini yaxshilashingiz mumkin. JavaScript rivojlanishda davom etar ekan, pattern matching dasturchining arsenalida tobora muhimroq vositaga aylanishi mumkin.
JavaScript'dagi pattern matching uchun mavjud kutubxonalar va takliflarni o'rganing va uning to'liq salohiyatini kashf etish uchun 'when' bandi bilan tajriba o'tkazing. Ushbu kuchli texnikani o'zlashtiring va JavaScript dasturlash mahoratingizni yuksaltiring.